package cn.jtfadmin.base.lang.common.service;

import cn.jtfadmin.base.lang.common.domain.dto.AntdvTreeDataRDTO;
import cn.jtfadmin.base.lang.common.domain.dto.SpecPDTO;
import cn.jtfadmin.base.lang.common.domain.dto.TreeRDTO;
import cn.jtfadmin.base.lang.common.domain.entity.TreeEntity;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.*;

public interface BaseTreeService<T extends TreeEntity> extends BaseService<T> {


    /**
     * 获取children
     * @param id id
     * @return
     */
    default List<T> findChildren(@NotBlank String id){
        return findChildren(id, true);
    }

    /**
     * 获取所有的children
     * @param id id
     * @return
     */
   default List<T> findAllChildren(@NotBlank String id){
        return findAllChildren(id, true);
    }

    /**
     * 获取children
     * @param id id
     * @param filterUserPermFlag 是否过滤用户
     * @return
     */
    List<T> findChildren(@NotBlank String id, boolean filterUserPermFlag);

    /**
     * 获取所有的children
     * @param filterUserPermFlag 是否过滤用户
     * @param id id
     * @return
     */
    List<T> findAllChildren(@NotBlank String id, boolean filterUserPermFlag);


    /**
     * 前端查询查询
     * @param specPDTO 查询条件
     * @param modelClass 返回结果
     * @return 查询结果
     */
    <V> List<TreeRDTO<V>> findTree(@NotNull SpecPDTO<T> specPDTO, @NotNull Class<V> modelClass);

    /**
     * 前端查询查询
     * @param column 返回字段，如果为空默认id， 或named
     * @return 查询结果
     */
     List<AntdvTreeDataRDTO> findAntdTree(String column);

    /**
     * 前端查询查询
     * @param columns
     * @param specPDTO
     * @return
     */
    List<AntdvTreeDataRDTO> findAntdTree(String columns, SpecPDTO<T> specPDTO);
}
